package com.zzl.finance.data.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zzl.finance.data.dto.*;
import com.zzl.finance.data.entity.EnterpriseEntity;
import com.zzl.general.common.exception.SysException;
import com.zzl.general.common.serurity.entity.User;
import com.zzl.general.common.utils.PageUtils;
import com.zzl.general.common.utils.Result;

import java.util.List;
import java.util.Map;

/**
 * @author gull
 * @date 2021-11-09 20:04:58
 */
@SuppressWarnings("javadoc")
public interface EnterpriseService extends IService<EnterpriseEntity> {
    /**
     * 企业认证
     *
     * @param enterpriseCertificationUpdateDto 企业信息
     * @param user                             用户
     * @throws SysException 异常
     */
    void saveEnterprise(VoucherEnterpriseCertificationUpdateDto enterpriseCertificationUpdateDto, User user) throws SysException;

    /**
     * 企业认证-资料修改
     *
     * @param enterpriseCertificationUpdateDto 企业信息
     * @param user                             用户
     */
    void updateEnterpriseData(VoucherEnterpriseCertificationUpdateDto enterpriseCertificationUpdateDto, User user) throws SysException;

    /**
     * 处理企业申请审批
     *
     * @param approveDto 审批信息
     * @param user       用户
     */
    void approveEnterprise(ApproveDto approveDto, User user) throws SysException;

    /**
     * 平台注册企业
     *
     * @param enterpriseCertificationUpdateDto 企业信息
     * @param user                             用户
     * @throws SysException 异常
     */
    void platformVoucherRegister(VoucherEnterpriseCertificationUpdateDto enterpriseCertificationUpdateDto, User user) throws SysException;

    /**
     * 查找核心企业
     *
     * @return 核心企业id 拼接的字符串
     */
    String findCoreEnterPrise();

    /**
     * 查找核心企业和集团的ids
     *
     * @return 核心和集团企业ids
     */
    List<String> findCoreEnterPriseIds();

    /**
     * 查询所有核心企业
     *
     * @return 所有核心企业
     */
    List<EnterpriseEntity> getCoreEnterpriseList();


    /**
     * 查找集团
     *
     * @return 集团实体
     */
    EnterpriseEntity findCoreGroup();

    /**
     * 查找核心企业
     *
     * @return 核心企业id 企业名称
     */
    Map<String, String> findCoreEnterPriseListId();

    /**
     * 分页查询
     *
     * @param params 查询参数
     * @return 分页数据
     */
    PageUtils queryPage(Map<String, Object> params);

    /**
     * 新增
     *
     * @param supplierAddDto 新增实体
     * @throws SysException 业务异常
     */
    void saveSupplier(EnterpriseAddDto supplierAddDto) throws SysException;

    /**
     * 获取当前登录人所在企业信息
     *
     * @param user
     * @return
     */
    List<EnterpriseEntity> getByLoginUser(User user);

    /**
     * 获取所有的供应商 数据
     *
     * @return
     */
    List<EnterpriseEntity> getAllSupplier(User user) throws SysException;

    /**
     * 企业信息唯一性验证
     *
     * @param info 企业名称或社会信用代码
     * @param type 参数类型
     */
    void checkEnterprise(String info, String type) throws SysException;

    /**
     * 企业信息管理列表
     *
     * @param user
     * @return
     */
    List<EnterpriseListDto> listByLoginUser(User user) throws SysException;


    void saveVoucherSupplier(VoucherEnterpriseAddDto supplier) throws SysException;


    PageUtils platformQueryPage(Map<String, Object> params);



    List<EnterpriseEntity> getOneBySocialCreditCode(String socialCreditCode);

    void updateEnterpriseById(VoucherEnterpriseCertificationUpdateDto enterpriseUpdateDto, User user) throws SysException;

    /**
     * 校验打款认证
     *
     * @param paymentCertificationDto 打款认证信息
     * @param user                    用户
     */
    void checkPaymentCertification(PaymentCertificationDto paymentCertificationDto, User user) throws SysException;

    /**
     * 企业信息查询
     *
     * @param enterpriseId 企业id
     * @return
     * @throws SysException 异常
     */
    VoucherEnterpriseCertificationUpdateDto getInfo(String enterpriseId) throws SysException;

    Map<String, String> getSocialCreditCode(List<String> ids);

    EnterpriseEntity getLoginUserEnterprise(User user)throws SysException;

    PageUtils listPage(Map<String, Object> params)throws SysException;

    void covertPage(VoucherEnterpriseCertificationUpdateDto supplier);

    void platApproveEnterprise(ApproveDto approveDto, User user)throws SysException;

    void setApproveLog(VoucherEnterpriseCertificationUpdateDto supplier);

    void freezingStatus(Map<String, Object> params)throws SysException;
    /**
     * 通过企业类型查询企业列表
     * @param category 企业类型
     * @return 企业列表
     */
    List<EnterpriseEntity> getEnterpriseListByCategory(String category);

    List<EnterpriseEntity> getGroup(User user)throws SysException;
}

